package nicg.st.outerAPI;

import javax.annotation.Resource;

import com.alibaba.fastjson.JSONObject;
import com.bingqi.Info;
import com.bingqi.MsgTrans1;
import com.bingqi.Result.p2pSendResult;

import nicg.st.Communicate;
import nicg.st.entity.MyConfig;
import nicg.st.entity.battle.FightAbility;
import nicg.st.outerAPI.bean.GetTreeNodesBean;
import test.ZZNLData;
import test.getTreeNodes;

/**
 * 获取外部接口的信息
 * 
 * @author GeChen
 *
 */
public class OuterInfo {
	/**
	 * 服务返回的正确码
	 */
	public final static int SUCCESS_CODE = 200;
	/**
	 * 服务返回的错误码
	 */
	public final static int ERROR_CODE = 400;
	/**
	 * 传输服务需要的一些默认配置
	 */
	public final static int DEFAULT_USER_DMT = 1;
	public final static int LEVEL_1_CODE = 255;
	public final static int LEVEL_2_CODE = 255;
	public final static int SUB_TYPE = 255;
	public final static int VER_TYPE = 5;
	public final static int CHANNEL = 0x1;
	public final static int PLUGIN = 0x10;
	public final static String DST_OUTER_IP = "0";

	@Resource
	MyConfig myConfig;

	/**
	 * 获取当前用户的ID
	 * 
	 * @param url
	 * @param port
	 * @param api
	 * @return 成功返回String，失败返回NULL
	 */
	public static String getCurUserId(String url, String port, String api) {
		// 联调版本
//		OuterAPI outerAPI = new OuterAPI.Builder().setBaseUrl(url).setBasePort(port).setApi(api).build();
//		String json = RestConfig.restTemplate().getForObject(outerAPI.toString(), String.class);
//		OuterResponse<GetCurUserIdBean> res = JSONObject.parseObject(json,
//				new TypeReference<OuterResponse<GetCurUserIdBean>>() {
//				});
//		if (res.getCode() == OuterInfo.SUCCESS_CODE) {
//			return res.getData().getUid();
//		} else {
//			return null;
//		}
		// 本地版本
		return "1";
	}

	/**
	 * 获取当前用户信息
	 * 
	 * @param url
	 * @param port
	 * @param api
	 * @return 成功返回"旅"/"分队"，失败返回NULL
	 */
	public static String getUserInfo(String url, String port, String api, String userId) {
		// 联调版本
//		OuterAPI outerAPI = new OuterAPI.Builder().setBaseUrl(url).setBasePort(port).setApi(api).build();
//		String result = outerAPI.toString() + "?uid=" + userId;
//		String json = RestConfig.restTemplate().getForObject(result, String.class);
//		OuterResponse<GetUserInfoBean> res = JSONObject.parseObject(json,
//				new TypeReference<OuterResponse<GetUserInfoBean>>() {
//				});
//		if (res.getCode() == OuterInfo.SUCCESS_CODE) {
//			return res.getData().getUserLevel();
//		} else {
//			return null;
//		}
		// 本地版本
		return "分队";
	}

	/**
	 * 返回动态名录的树形List, attention:前端显示树形结构时记得将该List再包一个List
	 * 
	 * @param url
	 * @param port
	 * @param api
	 * @return List<DTMLData>
	 */
	public static GetTreeNodesBean getDTMLTreeNodes(String url, String port, String api) {
		// 联调版本
//		OuterAPI outerAPI = new OuterAPI.Builder().setBaseUrl(url).setBasePort(port).setApi(api).build();
//		String json = RestConfig.restTemplate().getForObject(outerAPI.toString(), String.class, "");
//		OuterResponse<GetTreeNodesBean> res = JSONObject.parseObject(json,
//				new TypeReference<OuterResponse<GetTreeNodesBean>>() {
//				});
//
//		if (res.getCode() == OuterInfo.SUCCESS_CODE) {
//			return res.getData();
//		} else {
//			return null;
//		}
		// 本地版本
		return getTreeNodes.getData().getData();
	}

	/**
	 * 返回作战能力接口数据
	 * 
	 * @param url
	 * @param port
	 * @param api
	 * @return
	 */
	public static FightAbility getZZNL(String url, String port, String api) {
		// 联调版本
//		OuterAPI outerAPI = new OuterAPI.Builder().setBaseUrl(url).setBasePort(port).setApi(api).build();
//		String json = RestConfig.restTemplate().getForObject(outerAPI.toString(), String.class);
//		OuterResponse<FightAbility> res = JSONObject.parseObject(json,
//				new TypeReference<OuterResponse<FightAbility>>() {
//				});
//		if (res.getCode() == OuterInfo.SUCCESS_CODE) {
//			return res.getData();
//		} else {
//			return null;
//		}
		// 本地版本
		return ZZNLData.getFightAbility().getData();
	}

	/**
	 * 根据自己的IP发送内容到指定IP
	 * 
	 * @param <T>
	 * @param myIp
	 * @param targetIp
	 * @param dataType
	 * @return 200 发送成功；400 发送失败
	 */
	public static <T> int msgCommunicate(String myIp, String targetIp, T dataType) {
		/**
		 * 检测传输服务是否开启成功
		 */
		if (Communicate.communicateCode == Communicate.SERVICE_FAILURE) {
			return OuterInfo.ERROR_CODE;
		}
		Info info = new Info();
		/**
		 * 配置自己的信息
		 */
		Info.srcUsrInfo srcInfo = info.new srcUsrInfo();
		srcInfo.srcUserId = Communicate.IDENTITY_UNIT_ID;
		srcInfo.srcSoftId = Communicate.SOFT_ID;
		srcInfo.srcIp = myIp;
		/**
		 * 配置发送数据的信息
		 */
		Info.dataType dataInfo = info.new dataType();
		dataInfo.userFmt = OuterInfo.DEFAULT_USER_DMT;
		dataInfo.level1Code = OuterInfo.LEVEL_1_CODE;
		dataInfo.level2Code = OuterInfo.LEVEL_2_CODE;
		dataInfo.subType = OuterInfo.SUB_TYPE;

		String data = JSONObject.toJSONString(dataType);
		/**
		 * 配置发送方式的信息
		 */
		Info.transAttr transInfo = info.new transAttr();
		transInfo.verType = OuterInfo.VER_TYPE;
		transInfo.channel = OuterInfo.CHANNEL;
		transInfo.plugin = OuterInfo.PLUGIN;
		/**
		 * 配置回执的信息
		 */
		Info.ackAttr ackInfo = info.new ackAttr();
		ackInfo.isack = false;
		/**
		 * 配置接受方的信息
		 */
		Info.dstUsrInfo dstinfo = info.new dstUsrInfo();
		dstinfo.dstUserId = Communicate.IDENTITY_BRIGADE_ID;
		dstinfo.dstSoftId = Communicate.SOFT_ID;
		dstinfo.dstInnerIp = targetIp;
		dstinfo.dstOuterIp = OuterInfo.DST_OUTER_IP;

		p2pSendResult result = MsgTrans1.p2pSend_(srcInfo, dataInfo, data, data.length(), transInfo, ackInfo, dstinfo);

		if (result.returnValue == 0) {
			return OuterInfo.SUCCESS_CODE;
		} else {
			return OuterInfo.ERROR_CODE;
		}
	}

	/**
	 * 获取当前用户登录设备的IP
	 * 
	 * @param url
	 * @param port
	 * @param api
	 * @return 正确返回IP的信息，错误返回NULL
	 */
	public static String getUserLoginVehIP(String url, String port, String api, String userId) {
		// 联调版本
//		OuterAPI outerAPI = new OuterAPI.Builder().setBaseUrl(url).setBasePort(port).setApi(api).build();
//		String result = outerAPI.toString() + "?uid=" + userId;
//		String json = RestConfig.restTemplate().getForObject(result, String.class);
//		OuterResponse<GetUserLoginVehIP> res = JSONObject.parseObject(json,
//				new TypeReference<OuterResponse<GetUserLoginVehIP>>() {
//				});
//		if (res.getCode() == OuterInfo.SUCCESS_CODE) {
//			return res.getData().getVehIp().get(0);
//		} else {
//			return null;
//		}
		// 本地版本
		return "127.0.0.1";
	}

	/**
	 * 展示提示框的信息
	 * 
	 * @param path:exe的路径
	 * @param post:"send"/"receive"
	 * @param str_MsgMC:消息内容
	 * @param denst:发送方/收到方的名称
	 */
	public static void showBox(String path, String post, String str_MsgMC, String denst) {
		// 联调版本
//		try {
//			String[] message = { path, post, str_MsgMC, denst };
//			Process p = Runtime.getRuntime().exec(message);
//			String line = null;
//			BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
//			BufferedReader brError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
//			while ((line = br.readLine()) != null || (line = brError.readLine()) != null) {
//				System.out.println(line);
//			}
//		} catch (Exception e) {
//			throw new GlobalException("展示提示框错误！");
//		}
	}
}
